home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / cstdio.arc / SRC.ARC / FSEEK.C < prev    next >
C/C++ Source or Header  |  1984-07-31  |  682b  |  34 lines

  1. /*    fseek.c - reposition a stream.
  2.     (C) Copyright 1984 Gregory R. Mansfield - All Rights Reserved.
  3.     G. R. Mansfield.  84/07/26.
  4.     Ver 1.0-4731.
  5. */
  6.  
  7. #include <stdio.h>
  8.  
  9. int fseek(fp, offset, org)    /* reposition a stream */
  10. FILE *fp;
  11. long offset;
  12. int org;
  13. {
  14.     long np;
  15.  
  16.     if (fp->_flag & _WRITE) {
  17.         fflush(fp);
  18.         fp->_cnt = 0;
  19.     }
  20.     if (org == 1) {
  21.         np = offset + (long)(fp->_ptr - fp->_base);
  22.         if (np > 0L && np < (long)fp->_cnt) {    /* in buffer */
  23.             fp->_ptr = fp->_base + np;
  24.             fp->_cnt = BUFSIZE - np;
  25.             return(0);
  26.         }
  27.         offset = offset - (long)fp->_cnt;
  28.     }
  29.     fp->_cnt = 0;
  30.     fp->_ptr = fp->_base;
  31.     lseek(fp->_fd, offset, org);
  32.     fp->_flag &= ~_EOF;
  33. }
  34.